package io.oschina.binv.kapp.framework

import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject
import io.reactivex.subjects.Subject

/**
 * 解决 跨页面的 一对多的 值回传(onActivityResult)和触发刷新 ,值传递还是使用 intent绑定->initVariables取,需要的时候onSaveInstanceState保存
 * 引入RxJava2 的主要目的是解决跨页面,一对多传值的问题
 * 引入Retrofit2是为了方便测试API
 * PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
 */
class RxBus(val bus: Subject<Any> =PublishSubject.create<Any>().toSerialized()) {
    companion object {
       private val instance: RxBus by lazy {
            RxBus()
        }
        //Subscription改名成了Disposable。
        // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
        fun <T> toObservable(eventType: Class<T>): Observable<T> {
            //订阅者在UI线程执行
            return instance.bus.ofType(eventType)
        }
        // 发送一个新的事件
        fun post(o: Any) {
            instance.bus.onNext(o)
        }
    }
}